/**
 * 在这里定义和用户相关的路由处理函数，供 /router/user.js 模块进行调用
 */
const db = require("../db/index");
const bcrypt = require("bcryptjs");

// 用这个包来生成 Token 字符串
const jwt = require("jsonwebtoken");
// 导入配置文件
const { jwtSecretKey } = require("../config.js");

// 注册用户的处理函数
exports.regUser = (req, res) => {
  const userInfo = req.body;
  //调用 bcrypt.hashSync(明文密码, 随机盐的长度) 方法，对用户的密码进行加密处理
  userInfo.password = bcrypt.hashSync(userInfo.password, 10);

  if (!userInfo.username || !userInfo.password) {
    return res.send({
      status: 1,
      message: "用户名或密码不能为空！",
    });
  }

  let sqlQuery = `select * from sys_users where username=?`;
  db.query(sqlQuery, userInfo.username, (err, result) => {
    if (err) {
      return res.send({
        status: 1,
        message: err.message,
      });
    }
    // 用户名被占用
    if (result.length > 0) {
      return res.send({
        status: 1,
        message: "用户名被占用，请更换其他用户名！",
      });
    }

    const sqlInsert = "insert into sys_users set ?";
    db.query(
      sqlInsert,
      {
        username: userInfo.username,
        password: userInfo.password,
        email: "3157923650@qq.com",
        phone: "18112179693",
        user_pic: "",
      },
      function (err, results) {
        // 执行 SQL 语句失败
        if (err) return res.send({ status: 1, message: err.message });
        // SQL 语句执行成功，但影响行数不为 1
        if (results.affectedRows !== 1) {
          return res.send({ status: 1, message: "注册用户失败，请稍后再试！" });
        }
        // 注册成功
        res.send({ status: 0, message: "注册成功！" });
      }
    );
  });
};

// 登录的处理函数
exports.login = (req, res) => {
  const userInfo = req.body;
  
  const sqlQuery = `select * from sys_users where username= ?`;
  db.query(sqlQuery, userInfo.username, (err, results) => {
    if (err) return res.errorHandler(err);
    if (results.length !== 1) {
      res.errorHandler("login failed");
    }

    // 拿着用户输入的密码,和数据库中存储的密码进行对比
    //bcrypt.compareSync(用户提交的密码, 数据库中的密码) 方法比较密码是否一致
    const compareResult = bcrypt.compareSync(
      userInfo.password,
      results[0].password
    );
    if (!compareResult) {
      return res.errorHandler("密码错误");
    }

    //在生成 Token 字符串的时候，一定要剔除 密码 和 头像 的值
    const user = { ...results[0], password: "", user_pic: "" };
    const token = jwt.sign(user, jwtSecretKey, { expiresIn: "10h" });
    res.send({
      status: 0,
      message: "login successfully",
      token: `Bearer ${token}`,
    });
  });
};
